smooth-scrollbar
![Travis](https://img.shields.io/travis/idiotWu/smooth-scrollbar.svg)
Customize scrollbar in modern browsers with smooth scrolling experience.
Browser Compatibility
Browser | Version |
---|
IE | 10+ |
Chrome | 22+ |
Firefox | 16+ |
Safari | 8+ |
Android Browser | 4+ |
Chrome for Android | 32+ |
iOS Safarri | 7+ |
Install
Via npm:
npm install smooth-scrollbar --save
Via bower:
bower install smooth-scrollbar --save
Demo
http://idiotwu.github.io/smooth-scrollbar/
Why is native scrolling slow?
As is explained in this article, browser repaint every frame in scrolling. Less painting is better.
To avoid repainting, I use translate3d
in scroll content to create composite layers and force hardware accelerating.
Usage
Smooth scrollbar is defined as an UMD module which named Scrollbar
, you can use any loader to load it:
import Scrollbar from 'smooth-scrollbar';
Or get it from window
object:
const { Scrollbar } = window;
Don't forget to include the stylesheet in your page:
<link rel="stylesheet" href="dist/smooth-scrollbar.css">
Here's three way to tell the plugin which element should be a smooth scrollbar:
-
As an element:
<scrollbar>
...
</scrollbar>
-
As an attribute:
<section scrollbar>
...
</section>
-
As a data attribute
<section data-scrollbar>
...
</section>
Then init all scrollbars:
Scrollbar.initAll(options);
Or you can call Scrollbar.init(elem, options)
to manually init the scrollbar.
Available Options for Scrollbar
parameter | type | default | description |
---|
speed | Number | 1 | Scrolling speed scale. |
fricton | Number | 10 | Scrolling fricton, a percentage value within (1, 100) |
inflection | Number | 10 | When scrolling speed is lower than infleciton point, sensitivity will be scaled to 10x. |
sensitivity | Number | 0.1 | Wheel sensitivity, lower is accurate. |
Confusing with the option field? Try editor tool here!
DOM Structure
Following is the DOM structure that Scrollbar generated:
<scrollbar>
<article class="scroll-content">
your content here
</article>
<aside class="scrollbar-track scrollbar-track-x">
<div class="scrollbar-thumb scrollbar-thumb-x"></div>
</aside>
<aside class="scrollbar-track scrollbar-track-y">
<div class="scrollbar-thumb scrollbar-thumb-y"></div>
</aside>
</scrollbar>
APIs
Scrollbar
Instance
Details here.
Related
Todo
- text selection with scrolling on touch screens.
License
MIT.